import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            char[] c1 = (" " + in.nextLine()).toCharArray();
            char[] c2 = (" " + in.nextLine()).toCharArray();
            // dp[i][j]表示str1[0,i]和str[0,j]之间的最短编辑距离
            // 如果str1[index1] == str2[index2],那么dp[i][j] = dp[i-1][j-1]
            // 如果str1[index1] != str2[index2],那么就需要进行删除、新增或者修改
            // 那么一共有六种操作：
            // 1.删除str1[index1]
            // 2.删除str2[index2]
            // 3.str1新增str2[index2]
            // 4.str2新增str1[index1]
            // 5.修改str1[index1]为str2[index2]
            // 6.修改str2[index2]为str1[index1]
            // 这里删除str1[index1]和str2新增str1[index1]的结果像相同的
            // (删除str1[index1]，那么dp[i][j]=dp[i-1][j]+1),(str2新增str1[index1]，那么dp[i][j] = dp[i-1][j]+1)
            // 同理删除str2[index2]和str1新增str2[index2]是相同的
            // 修改str1[idnex1]和修改str2[index2]也是相同的


            // !!!注意初始化问题
            int[][] dp = new int[c1.length][c2.length];
            for (int i = 0; i < c1.length; i++) {
                dp[i][0] = i;
            }
            for (int j = 0; j < c2.length; j++) {
                dp[0][j] = j;
            }
            for (int i = 1; i < c1.length; i++) {
                for (int j = 1; j < c2.length; j++) {
                    if (c1[i] == c2[j]) {
                        dp[i][j] = dp[i-1][j-1];
                    } else {
                        dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
                    }
                }
            }
            System.out.println(dp[c1.length-1][c2.length-1]);
        }
    }
}
